home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1995 March / macformat-022.iso / Shareware City / Developers / src / bbedit-30-dev-kit.hqx / BBEdit 3.0 Extension Dev. Kit / Interfaces / ExternalInterface.h < prev   
Encoding:
C/C++ Source or Header  |  1994-07-09  |  20.9 KB  |  613 lines

  1. #pragma once
  2.  
  3. #include <MixedMode.h>
  4. #include <Dialogs.h>
  5.  
  6. #if defined(powerc) || defined (__powerc)
  7. #pragma options align=mac68k
  8. #endif
  9.  
  10. typedef struct
  11. {
  12.     FSSpec    spec;    //    designates file on disk
  13.     long    key;    //    reserved for future expansion
  14.  
  15.     char    tree;    //    0 for absolute, 1 for project, 2 for system
  16.     Boolean    found;    //    FALSE if file couldn't be located; if so, all other info is moot
  17.  
  18.     OSType    type;    //    file type of found file
  19.     OSType    crtr;    //    signature of found file's creator
  20.     
  21.     short    spare0;    //    reserved for future expansion
  22.     long    spare1;
  23. } ProjectEntry;
  24.  
  25. enum
  26. {
  27.     kNeitherTree,
  28.     kProjectTree,
  29.     kSystemTree
  30. };
  31.  
  32. #define kCurrentExternalVersion        4    //    current version of callbacks
  33.  
  34. //    Universal callback interfaces
  35.  
  36. #if USESROUTINEDESCRIPTORS
  37.  
  38. #define ExtensionUPPInfo (kPascalStackBased \
  39.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(ExternalCallbackBlock *))) \
  40.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(WindowPtr))))
  41.  
  42. #define GetWindowContentsUPPInfo (kPascalStackBased \
  43.                             | RESULT_SIZE(SIZE_CODE(sizeof(Handle))) \
  44.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(WindowPtr))))
  45.                             
  46. #define GetSelectionUPPInfo (kPascalStackBased \
  47.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long *))) \
  48.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long *))) \
  49.                             | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long *))))
  50.                             
  51. #define SetSelectionUPPInfo (kPascalStackBased \
  52.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long))) \
  53.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long))) \
  54.                             | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long))))
  55.  
  56. #define GetDocInfoUPPInfo (kPascalStackBased \
  57.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(WindowPtr))) \
  58.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(unsigned char *))) \
  59.                             | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(short *))) \
  60.                             | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(long *))))
  61.  
  62. #define GetModDateUPPInfo (kPascalStackBased \
  63.                             | RESULT_SIZE(SIZE_CODE(sizeof(long))) \
  64.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(WindowPtr))))
  65.                             
  66. #define CopyUPPInfo (kPascalStackBased \
  67.                             | RESULT_SIZE(SIZE_CODE(sizeof(Handle))))
  68.                             
  69. #define PasteUPPInfo (kPascalStackBased \
  70.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(Handle))))
  71.                             
  72. #define GetLastLineUPPInfo (kPascalStackBased | RESULT_SIZE(SIZE_CODE(sizeof(long))))
  73.  
  74. #define GetLineNumberUPPInfo (kPascalStackBased \
  75.                             | RESULT_SIZE(SIZE_CODE(sizeof(long))) \
  76.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long))))
  77.                             
  78. #define GetLineStartUPPInfo (kPascalStackBased \
  79.                             | RESULT_SIZE(SIZE_CODE(sizeof(long))) \
  80.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long))))
  81.                             
  82. #define GetLineEndUPPInfo (kPascalStackBased \
  83.                             | RESULT_SIZE(SIZE_CODE(sizeof(long))) \
  84.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long))))
  85.  
  86. #define GetLinePosUPPInfo (kPascalStackBased \
  87.                             | RESULT_SIZE(SIZE_CODE(sizeof(long))) \
  88.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long))))
  89.  
  90. #define InsertUPPInfo (kPascalStackBased \
  91.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(char *))) \
  92.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long))))
  93.                             
  94. #define DeleteUPPInfo (kPascalStackBased)
  95.  
  96. #define SetWindowContentsUPPInfo (kPascalStackBased \
  97.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(WindowPtr))) \
  98.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(Handle))))
  99.                             
  100. #define ContentsChangedUPPInfo (kPascalStackBased \
  101.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(WindowPtr))))
  102.                             
  103. #define GetFileTextUPPInfo (kPascalStackBased \
  104.                             | RESULT_SIZE(SIZE_CODE(sizeof(Handle))) \
  105.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(short))) \
  106.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long))) \
  107.                             | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(unsigned char *))) \
  108.                             | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(Boolean *))))
  109.                             
  110. #define GetFolderUPPInfo (kPascalStackBased \
  111.                             | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \
  112.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(unsigned char *))) \
  113.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short *))) \
  114.                             | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long *))))
  115.                             
  116. #define OpenSeveralUPPInfo (kPascalStackBased \
  117.                             | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \
  118.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(Boolean))) \
  119.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short *))) \
  120.                             | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(StandardFileReply ***))))
  121.                             
  122. #define CenterDialogUPPInfo (kPascalStackBased \
  123.                             | RESULT_SIZE(SIZE_CODE(sizeof(DialogPtr))) \
  124.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(short))))
  125.                             
  126. #define StandardFilterUPPInfo uppModalFilterProcInfo
  127.                             
  128. #define FrameDialogItemUPPInfo uppUserItemProcInfo
  129.  
  130. #define NewDocumentUPPInfo    (kPascalStackBased \
  131.                             | RESULT_SIZE(SIZE_CODE(sizeof(WindowPtr))))
  132.                             
  133. #define OpenDocumentUPPInfo    (kPascalStackBased \
  134.                             | RESULT_SIZE(SIZE_CODE(sizeof(WindowPtr))))
  135.                             
  136. #define AllocateUPPInfo        (kPascalStackBased \
  137.                             | RESULT_SIZE(SIZE_CODE(sizeof(Handle))) \
  138.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long))) \
  139.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(Boolean))))
  140.                             
  141. #define FindPatternUPPInfo    (kPascalStackBased \
  142.                             | RESULT_SIZE(SIZE_CODE(sizeof(long))) \
  143.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(char *))) \
  144.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long))) \
  145.                             | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long))) \
  146.                             | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(char *))) \
  147.                             | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(long))) \
  148.                             | STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(Boolean))))
  149.  
  150. #define ReportOSErrorUPPInfo    (kPascalStackBased)
  151.  
  152. #define GetPreferenceUPPInfo (kPascalStackBased \
  153.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(ResType))) \
  154.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short))) \
  155.                             | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(void *))) \
  156.                             | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(short *))))
  157.                             
  158. #define SetPreferenceUPPInfo (kPascalStackBased \
  159.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(ResType))) \
  160.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short))) \
  161.                             | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(void *))) \
  162.                             | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(short *))))
  163.  
  164. #define StartProgressUPPInfo (kPascalStackBased \
  165.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(unsigned char *))) \
  166.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long))) \
  167.                             | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(Boolean))))
  168.                             
  169. #define DoProgressUPPInfo    (kPascalStackBased \
  170.                             | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \
  171.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long))))
  172.  
  173. #define DoneProgressUPPInfo    (kPascalStackBased)
  174.  
  175. #define GetProjectListUPPInfo (kPascalStackBased \
  176.                             | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \
  177.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(FSSpec *))) \
  178.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short *))) \
  179.                             | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(short *))) \
  180.                             | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(ProjectEntry***))))
  181.                             
  182. #define ProjectTextListUPPInfo (kPascalStackBased \
  183.                             | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \
  184.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(FSSpec *))) \
  185.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(Handle *))))
  186.  
  187. #define PresetUndoUPPInfo    (kPascalStackBased \
  188.                             | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))))
  189.                             
  190. #define SetUndoUPPInfo        (kPascalStackBased)
  191.  
  192. #define OpenFileUPPInfo        (kPascalStackBased \
  193.                             | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \
  194.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(FSSpec *))) \
  195.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(WindowPtr *))))
  196.  
  197. typedef    UniversalProcPtr    GetWindowContentsProc;
  198. typedef    UniversalProcPtr    GetSelectionProc;
  199. typedef    UniversalProcPtr    SetSelectionProc;
  200. typedef    UniversalProcPtr    GetDocInfoProc;
  201. typedef    UniversalProcPtr    GetModDateProc;
  202. typedef    UniversalProcPtr    CopyProc;
  203. typedef    UniversalProcPtr    PasteProc;
  204.     
  205. typedef    UniversalProcPtr    GetLastLineProc;
  206. typedef    UniversalProcPtr    GetLineNumberProc;
  207. typedef    UniversalProcPtr    GetLineStartProc;
  208. typedef    UniversalProcPtr    GetLineEndProc;
  209. typedef    UniversalProcPtr    GetLinePosProc;
  210.     
  211. typedef    UniversalProcPtr    InsertProc;
  212. typedef    UniversalProcPtr    DeleteProc;
  213.     
  214. typedef    UniversalProcPtr    SetWindowContentsProc;
  215. typedef    UniversalProcPtr    ContentsChangedProc;
  216.     
  217. typedef    UniversalProcPtr    GetFileTextProc;
  218.  
  219. typedef    UniversalProcPtr    GetFolderProc;
  220. typedef    UniversalProcPtr    OpenSeveralProc;
  221.     
  222. typedef    UniversalProcPtr    CenterDialogProc;
  223. typedef    UniversalProcPtr    StandardFilterProc;
  224. typedef    UniversalProcPtr    FrameDialogItemProc;
  225.     
  226. typedef    UniversalProcPtr    NewDocumentProc;
  227. typedef    UniversalProcPtr    OpenDocumentProc;
  228.  
  229. typedef    UniversalProcPtr    AllocateProc;
  230. typedef    UniversalProcPtr    FindPatternProc;
  231.     
  232. typedef    UniversalProcPtr    ReportOSErrorProc;
  233.     
  234. typedef    UniversalProcPtr    GetPreferenceProc;
  235. typedef    UniversalProcPtr    SetPreferenceProc;
  236.  
  237. typedef    UniversalProcPtr    StartProgressProc;
  238. typedef    UniversalProcPtr    DoProgressProc;
  239. typedef    UniversalProcPtr    DoneProgressProc;
  240.     
  241. typedef    UniversalProcPtr    GetProjectListProc;
  242. typedef    UniversalProcPtr    ProjectTextListProc;
  243.         
  244. typedef    UniversalProcPtr    PresetUndoProc;
  245. typedef    UniversalProcPtr    SetUndoProc;
  246.     
  247. typedef    UniversalProcPtr    OpenFileProc;
  248.  
  249. #define CallGetWindowContents(proc, w) \
  250.     (Handle)(CallUniversalProc(proc, GetWindowContentsUPPInfo, (w)))
  251.     
  252. #define CallGetSelection(proc, selStart, selEnd, firstChar) \
  253.     (CallUniversalProc(proc, GetSelectionUPPInfo, (selStart), (selEnd), (firstChar)))
  254.     
  255. #define CallSetSelection(proc, selStart, selEnd, firstChar) \
  256.     (CallUniversalProc(proc, SetSelectionUPPInfo, (selStart), (selEnd), (firstChar)))
  257.     
  258. #define CallGetDocInfo(proc, w, name, vRefNum, dirID) \
  259.     (CallUniversalProc(proc, GetDocInfoUPPInfo, (w), (name), (vRefNum), (dirID))
  260.     
  261. #define CallGetModDate(proc, w) \
  262.     (CallUniversalProc(proc, GetModDateUPPInfo, (w)))
  263.     
  264. #define CallCopy(proc) \
  265.     (Handle)(CallUniversalProc(proc, CopyUPPInfo))
  266.     
  267. #define CallPaste(proc, h) \
  268.     (CallUniversalProc(proc, PasteUPPInfo, (h)))
  269.     
  270. #define CallGetLastLine(proc) \
  271.     (CallUniversalProc(proc, GetLastLineUPPInfo))
  272.     
  273. #define CallGetLineNumber(proc, sel) \
  274.     (CallUniversalProc(proc, GetLineNumberUPPInfo, (sel)))
  275.     
  276. #define CallGetLineStart(proc, sel) \
  277.     (CallUniversalProc(proc, GetLineStartUPPInfo, (sel)))
  278.  
  279. #define CallGetLineEnd(proc, sel) \
  280.     (CallUniversalProc(proc, GetLineEndUPPInfo, (sel)))
  281.  
  282. #define CallGetLinePos(proc, sel) \
  283.     (CallUniversalProc(proc, GetLinePosUPPInfo, (sel)))
  284.  
  285. #define CallInsert(proc, text, len) \
  286.     (CallUniversalProc(proc, InsertUPPInfo, (text), (len)))
  287.     
  288. #define CallDelete(proc) \
  289.     (CallUniversalProc(proc, DeleteUPPInfo))
  290.     
  291. #define CallSetWindowContents(proc, w, h) \
  292.     (CallUniversalProc(proc, SetWindowContentsUPPInfo, (w), (h)))
  293.     
  294. #define CallContentsChanged(proc, w) \
  295.     (CallUniversalProc(proc, ContentsChangedUPPInfo, (w)))
  296.     
  297. #define CallGetFileText(proc, vRefNum, dirID, name, canDispose) \
  298.     (Handle)(CallUniversalProc(proc, GetFileTextUPPInfo, (vRefNum), (dirID), (name), (canDispose)))
  299.     
  300. #define CallGetFolder(proc, prompt, vRefNum, dirID) \
  301.     (Boolean)(CallUniversalProc(proc, GetFolderUPPInfo, (prompt), (vRefNum), (dirID)))
  302.     
  303. #define CallOpenSeveral(proc, sort, file_count, files) \
  304.     (Boolean)(CallUniversalProc(proc, OpenSeveralUPPInfo, (sort), (file_count), (files)))
  305.     
  306. #define CallCenterDialog(proc, dialogID) \
  307.     (DialogPtr)(CallUniversalProc(proc, CenterDialogUPPInfo, (dialogID)))
  308.     
  309. #define CallStandardFilter(proc, d, event, item) \
  310.     CallModalFilterProc(proc, (d), (event), (item))
  311.  
  312. #define CallFrameDialogItem(proc, d, item) \
  313.     CallUserItemProc(proc, (d), (item))
  314.     
  315. #define CallNewDocument(proc) \
  316.     (WindowPtr)(CallUniversalProc(proc, NewDocumentUPPInfo))
  317.     
  318. #define CallOpenDocument(proc) \
  319.     (WindowPtr)(CallUniversalProc(proc, OpenDocumentUPPInfo))
  320.     
  321. #define CallAllocate(proc, size, clear) \
  322.     (Handle)(CallUniversalProc(proc, AllocateUPPInfo, (size), (clear)))
  323.     
  324. #define CallFindPattern(proc, text, text_len, text_offset, pat, pat_len, case_sens) \
  325.     (CallUniversalProc(proc, FindPatternUPPInfo, (text), (text_len), (text_offset), \
  326.                         (pat), (pat_len), (case_sens)))
  327.                         
  328. #define CallReportOSError(proc, code) \
  329.     (CallUniversalProc(proc, ReportOSErrorUPPInfo, (code)))
  330.     
  331. #define CallGetPreference(proc, prefType, req_len, buffer, act_len) \
  332.     (CallUniversalProc(proc, GetPreferenceUPPInfo, (prefType), (req_len), (buffer), (act_len)))
  333.     
  334. #define CallSetPreference(proc, prefType, req_len, buffer, act_len) \
  335.     (CallUniversalProc(proc, SetPreferenceUPPInfo, (prefType), (req_len), (buffer), (act_len)))
  336.  
  337. #define CallStartProgress(proc, str, total, cancel_allowed) \
  338.     (CallUniversalProc(proc, StartProgressUPPInfo, (str), (total), (cancel_allowed)))
  339.     
  340. #define CallDoProgress(proc, done) \
  341.     (Boolean)(CallUniversalProc(proc, DoProgressUPPInfo, (done)))
  342.     
  343. #define CallDoneProgress(proc) \
  344.     (CallUniversalProc(proc, DoneProgressUPPInfo))
  345.     
  346. #define CallGetProjectList(proc, spec, kind, count, entries) \
  347.     (Boolean)(CallUniversalProc(proc, GetProjectListUPPInfo, (spec), (kind), (count), (entries)))
  348.     
  349. #define CallProjectTextList(proc, spec, text) \
  350.     (Boolean)(CallUniversalProc(proc, ProjectTextListUPPInfo, (spec), (text)))
  351.     
  352. #define CallPresetUndo(proc) \
  353.     (Boolean)(CallUniversalProc(proc, PresetUndoUPPInfo))
  354.     
  355. #define CallSetUndo(proc) \
  356.     (CallUniversalProc(proc))
  357.     
  358. #define CallOpenFile(proc, spec, w) \
  359.     (Boolean)(CallUniversalProc(proc, OpenFileUPPInfo, (spec), (w)))
  360.     
  361. #else
  362.  
  363. typedef pascal    Handle    (*GetWindowContentsProc)(WindowPtr w);
  364. typedef    pascal    void    (*GetSelectionProc)(long *selStart, long *selEnd, long *firstChar);
  365. typedef    pascal    void    (*SetSelectionProc)(long selStart, long selEnd, long firstChar);
  366. typedef    pascal    void    (*GetDocInfoProc)(WindowPtr w, Str255 fName, short *vRefNum, long *dirID);
  367. typedef    pascal    long    (*GetModDateProc)(WindowPtr w);
  368. typedef    pascal    Handle    (*CopyProc)(void);
  369. typedef    pascal    void    (*PasteProc)(Handle pasteText);
  370.     
  371. typedef    pascal    long    (*GetLastLineProc)(void);
  372. typedef    pascal    long    (*GetLineNumberProc)(long selection);
  373. typedef    pascal    long    (*GetLineStartProc)(long selection);
  374. typedef    pascal    long    (*GetLineEndProc)(long selection);
  375. typedef    pascal    long    (*GetLinePosProc)(long line);
  376.     
  377. typedef    pascal    void    (*InsertProc)(char *text, long len);
  378. typedef    pascal    void    (*DeleteProc)(void);
  379.     
  380. typedef    pascal    void    (*SetWindowContentsProc)(WindowPtr w, Handle h);
  381. typedef    pascal    void    (*ContentsChangedProc)(WindowPtr w);
  382.     
  383. typedef    pascal    Handle        (*GetFileTextProc)(short vRefNum, long dirID, Str255 fName, Boolean *canDispose);
  384.  
  385. typedef    pascal    Boolean        (*GetFolderProc)(Str255 prompt, short *vRefNum, long *dirID);
  386. typedef    pascal    Boolean        (*OpenSeveralProc)(Boolean sort, short *file_count, StandardFileReply ***files);
  387.     
  388. typedef    pascal    DialogPtr    (*CenterDialogProc)(short dialogID);
  389. typedef    pascal    Boolean        (*StandardFilterProc)(DialogPtr d, EventRecord *event, short *item);
  390. typedef    pascal    void        (*FrameDialogItemProc)(DialogPtr d, short item);
  391.     
  392. typedef    pascal    WindowPtr    (*NewDocumentProc)(void);
  393. typedef    pascal    WindowPtr    (*OpenDocumentProc)(void);
  394.  
  395. typedef    pascal    Handle        (*AllocateProc)(long size, Boolean clear);
  396. typedef    pascal    long        (*FindPatternProc)(char *text, long text_len, long text_offset, 
  397.                                         char *pat, long pat_len,
  398.                                         Boolean case_sensitive);
  399.     
  400. typedef    pascal    void        (*ReportOSErrorProc)(short code);
  401.     
  402. typedef    pascal    void        (*GetPreferenceProc)(ResType prefType, short req_len, void *buffer, short *act_len);
  403. typedef    pascal    void        (*SetPreferenceProc)(ResType prefType, short req_len, void *buffer, short *act_len);
  404.  
  405. typedef    pascal    void        (*StartProgressProc)(Str255 str, long total, Boolean cancel_allowed);
  406. typedef    pascal    Boolean        (*DoProgressProc)(long done);
  407. typedef    pascal    void        (*DoneProgressProc)(void);
  408.     
  409. typedef    pascal    Boolean        (*GetProjectListProc)(FSSpec *spec, short *kind, short *count, ProjectEntry ***entries);
  410. typedef    pascal    Boolean        (*ProjectTextListProc)(FSSpec *spec, Handle *text);
  411.         
  412. typedef    pascal    Boolean        (*PresetUndoProc)(void);
  413. typedef    pascal    void        (*SetUndoProc)(void);
  414.     
  415. typedef    pascal    Boolean        (*OpenFileProc)(FSSpec *spec, WindowPtr *w);
  416.  
  417.  
  418. #define CallGetWindowContents(proc, w) \
  419.     ((GetWindowContentsProc)proc)((w))
  420.     
  421. #define CallGetSelection(proc, selStart, selEnd, firstChar) \
  422.     ((GetSelectionProc)proc)((selStart), (selEnd), (firstChar))
  423.     
  424. #define CallSetSelection(proc, selStart, selEnd, firstChar) \
  425.     ((SetSelectionProc)proc)((selStart), (selEnd), (firstChar))
  426.     
  427. #define CallGetDocInfo(proc, w, name, vRefNum, dirID) \
  428.     ((GetDocInfoProc)(proc))((w), (name), (vRefNum), (dirID))
  429.     
  430. #define CallGetModDate(proc, w) \
  431.     ((GetModDateProc)(proc))((w))
  432.     
  433. #define CallCopy(proc) \
  434.     ((CopyProc)(proc))
  435.     
  436. #define CallPaste(proc, h) \
  437.     ((PasteProc)(proc))((h))
  438.     
  439. #define CallGetLastLine(proc) \
  440.     ((GetLastLineProc)(proc))()
  441.     
  442. #define CallGetLineNumber(proc, sel) \
  443.     ((GetLineNumberProc)(proc))((sel))
  444.     
  445. #define CallGetLineStart(proc, sel) \
  446.     ((GetLineStartProc)(proc))((sel))
  447.     
  448. #define CallGetLineEnd(proc, sel) \
  449.     ((GetLineEndProc)(proc))((sel))
  450.  
  451. #define CallGetLinePos(proc, sel) \
  452.     ((GetLinePosProc)(proc))((sel))
  453.  
  454. #define CallInsert(proc, text, len) \
  455.     ((InsertProc)(proc))((text), (len))
  456.     
  457. #define CallDelete(proc) \
  458.     ((DeleteProc)(proc))()
  459.     
  460. #define CallSetWindowContents(proc, w, h) \
  461.     ((SetWindowContentsProc)(proc))((w), (h))
  462.     
  463. #define CallContentsChanged(proc, w) \
  464.     ((ContentsChangedProc)(proc))((w))
  465.     
  466. #define CallGetFileText(proc, vRefNum, dirID, name, canDispose) \
  467.     ((GetFileTextProc)(proc))((vRefNum), (dirID), (name), (canDispose))
  468.     
  469. #define CallGetFolder(proc, prompt, vRefNum, dirID) \
  470.     ((GetFolderProc)(proc))((prompt), (vRefNum), (dirID))
  471.     
  472. #define CallOpenSeveral(proc, sort, file_count, files) \
  473.     ((OpenSeveralProc)(proc))((sort), (file_count), (files))
  474.     
  475. #define CallCenterDialog(proc, dialogID) \
  476.     ((CenterDialogProc)(proc))((dialogID))
  477.     
  478. #define CallStandardFilter(proc, d, event, item) \
  479.     ((ModalFilterProcPtr)(proc))((d), (event), (item))
  480.  
  481. #define CallFrameDialogItem(proc, d, item) \
  482.     ((UserItemProcPtr)(proc))((d), (item))
  483.     
  484. #define CallNewDocument(proc) \
  485.     ((NewDocumentProc)(proc))()
  486.     
  487. #define CallOpenDocument(proc) \
  488.     ((OpenDocumentProc)(proc))()
  489.     
  490. #define CallAllocate(proc, size, clear) \
  491.     ((AllocateProc)(proc))((size), (clear))
  492.     
  493. #define CallFindPattern(proc, text, text_len, text_offset, pat, pat_len, case_sens) \
  494.     ((FindPatternProc)(proc))((text), (text_len), (text_offset), (pat), (pat_len), (case_sens))
  495.                         
  496. #define CallReportOSError(proc, code) \
  497.     ((ReportOSErrorProc)(proc))((code))
  498.     
  499. #define CallGetPreference(proc, prefType, req_len, buffer, act_len) \
  500.     ((GetPreferenceProc)(proc))((prefType), (req_len), (buffer), (act_len))
  501.     
  502. #define CallSetPreference(proc, prefType, req_len, buffer, act_len) \
  503.     ((SetPreferenceProc)(proc))((prefType), (req_len), (buffer), (act_len))
  504.  
  505. #define CallStartProgress(proc, str, total, cancel_allowed) \
  506.     ((StartProgressProc)(proc))((str), (total), (cancel_allowed))
  507.     
  508. #define CallDoProgress(proc, done) \
  509.     ((DoProgressProc)(proc))((done))
  510.     
  511. #define CallDoneProgress(proc) \
  512.     ((DoneProgressProc)(proc))()
  513.     
  514. #define CallGetProjectList(proc, spec, kind, count, entries) \
  515.     ((GetProjectListProc)(proc))((spec), (kind), (count), (entries))
  516.     
  517. #define CallProjectTextList(proc, spec, text) \
  518.     ((ProjectTextListProc)(proc))((spec), (text))
  519.     
  520. #define CallPresetUndo(proc) \
  521.     ((PresetUndoProc)(proc))()
  522.     
  523. #define CallSetUndo(proc) \
  524.     ((SetUndoProc)(proc))()
  525.     
  526. #define CallOpenFile(proc, spec, w) \
  527.     ((OpenFileProc)(proc))((spec), (w))
  528.  
  529. #endif
  530.  
  531.  
  532. typedef struct
  533. {
  534.     short    version;
  535.     
  536.     //    version 1 callbacks
  537.     
  538.     GetWindowContentsProc    GetWindowContents;
  539.     GetSelectionProc    GetSelection;
  540.     SetSelectionProc    SetSelection;
  541.     GetDocInfoProc    GetDocInfo;
  542.     GetModDateProc    GetModDate;
  543.     CopyProc    Copy;
  544.     PasteProc    Paste;
  545.     
  546.     //    version 2 callbacks
  547.     
  548.     /*    Text-Editing stuff */
  549.     GetLastLineProc    GetLastLine;
  550.     GetLineNumberProc    GetLineNumber;
  551.     GetLineStartProc    GetLineStart;
  552.     GetLineEndProc    GetLineEnd;
  553.     GetLinePosProc    GetLinePos;
  554.     
  555.     InsertProc    Insert;
  556.     DeleteProc    Delete;
  557.     
  558.     /*    Getting and Setting window text */
  559.     SetWindowContentsProc    SetWindowContents;
  560.     ContentsChangedProc    ContentsChanged;
  561.     
  562.     /*    Reading file text */
  563.     GetFileTextProc    GetFileText;
  564.  
  565.     /*    Direct user-interface calls */
  566.     GetFolderProc    GetFolder;
  567.     OpenSeveralProc    OpenSeveral;
  568.     
  569.     CenterDialogProc    CenterDialog;
  570.     StandardFilterProc    StandardFilter;
  571.     FrameDialogItemProc    FrameDialogItem;
  572.     
  573.     NewDocumentProc    NewDocument;
  574.     OpenDocumentProc    OpenDocument;
  575.  
  576.     /*    Utility Routines */
  577.     AllocateProc    Allocate;
  578.     FindPatternProc    FindPattern;
  579.     
  580.     ReportOSErrorProc    ReportOSError;
  581.     
  582.     /*    Preference routines */
  583.     GetPreferenceProc    GetPreference;
  584.     SetPreferenceProc    SetPreference;
  585.  
  586.     /*    Progress routines */
  587.     StartProgressProc    StartProgress;
  588.     DoProgressProc    DoProgress;
  589.     DoneProgressProc    DoneProgress;
  590.     
  591.     //    Version 3 callbacks
  592.     GetProjectListProc    GetProjectList;
  593.     ProjectTextListProc    ProjectTextList;
  594.     
  595.     //    version 4 callbacks
  596.     
  597.     PresetUndoProc    PresetUndo;
  598.     SetUndoProc    SetUndo;
  599.     
  600.     OpenFileProc    OpenFile;
  601. } ExternalCallbackBlock;
  602.  
  603. #if defined(powerc) || defined (__powerc)
  604. #pragma options align=reset
  605. #endif
  606.  
  607. /*    
  608.     'main' for a BBXT is declared:
  609.     
  610. pascal void main(ExternalCallbackBlock *callbacks, WindowPtr w);        [C]
  611.  
  612. */
  613.